import datetime,ctypes

def group_by_fields(data, group_fields) -> list:
    """
    按照指定字段对数据进行分组，返回列表形式的分组结果
    
    参数:
        data (list): 原始数据列表（每个元素为字典）
        group_fields (list): 用于分组的字段列表（如['price', 'code']）
    
    返回:
        list: 分组结果列表，每个元素为字典，包含：
            - 'group_key': 分组条件（字典，如{'price': '25.9', 'code': 'LaBuBu系列'}）
            - 'items': 该组的数据列表（包含所有符合分组条件的原始项）
    """
    # 先按字段分组（中间结果用字典存储）
    groups_dict = {}
    for item in data:
        try:
            # 生成分组键（元组形式，确保可哈希）
            key_tuple = tuple(item[field] for field in group_fields)
            # 同时生成键的字典形式（用于最终返回）
            key_dict = {field: item[field] for field in group_fields}
        except KeyError as e:
            raise ValueError(f"数据中缺少分组所需的字段: {e}")

        # 加入分组（用元组作为字典键，确保唯一性）
        if key_tuple not in groups_dict:
            groups_dict[key_tuple] = {
                'group_key': key_dict,
                'items': []
            }
        groups_dict[key_tuple]['items'].append(item)

    # 将字典 values 转换为列表（最终结果）
    return list(groups_dict.values())

def Close_Browser_Dialog() -> bool:
    user32 = ctypes.windll.user32
    _et = datetime.datetime.now() + datetime.timedelta(seconds=5)
    while datetime.datetime.now() < _et:
        if user32.FindWindowW(None, "打开"):
            user32.SendMessageW(user32.FindWindowW(None, "打开"), 16, 0, 0)
            return True
        else:
            continue
    return False